package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.PropertyInspectSettingDTO;
import com.itlong.cloud.POJO.VO.property.PropertyInspectSettingVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业-巡检设置持久层接口
 * </desc>
 *
 * @createDate 2019/12/24
 */
@Mapper
@Repository
public interface IPropertyInspectSettingDao {

    /**
     * <desc>
     *      保存
     * <desc/>
     *
     * @param params 保存信息
     * @return sql执行行数
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存
     * </desc>
     *
     * @param params 待保存的信息列表
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2018/8/30
     */
    Integer batchSave(List<Map<String, Object>> params);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param params 修改的参数
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2019-12-25
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *      根据计划ID删除property_inspect_plan_program_time_info
     * </desc>
     *
     * @param planId 计划ID
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2019-12-25
     */
    Integer deletePlanProgramTimeInfo(@Param("planId") String planId);

    /**
     * <desc>
     *      获取巡检点编号 即蓝牙门禁deviceUnique
     * <desc/>
     *
     * @param projectId 项目编号
     * @return 编号集合
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    List<String> getInspectPointNumber(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取巡检点分页列表。
     * <desc/>
     *
     * @param  params 查询条件
     * @return 巡检点分页集合
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    List<PropertyInspectSettingVO> getInspectPointByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检点分页数量
     * <desc/>
     *
     * @param params 查询条件
     * @return 数量
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer getInspectPointByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检区域分页列表。
     * <desc/>
     *
     * @param  params 查询条件
     * @return 巡检点分页集合
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    List<PropertyInspectSettingVO> getInspectAreaByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检区域分页数量
     * <desc/>
     *
     * @param params 查询条件
     * @return 数量
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer getInspectAreaByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检路线分页列表。
     * <desc/>
     *
     * @param  params 查询条件
     * @return 巡检点分页集合
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    List<PropertyInspectSettingVO> getInspectLineByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检路线分页数量
     * <desc/>
     *
     * @param params 查询条件
     * @return 数量
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer getInspectLineByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检计划分页列表。
     * <desc/>
     *
     * @param  params 查询条件
     * @return 巡检点分页集合
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    List<PropertyInspectSettingVO> getInspectPlanByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取巡检计划分页数量
     * <desc/>
     *
     * @param params 查询条件
     * @return 数量
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer getInspectPlanByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      修改巡检设置相关状态。
     * <desc/>
     *
     * @param  dto 修改状态相关参数 type 1巡检区域 2巡检点 3巡检路线 4巡检计划 inspectId配合type使用
     * @return
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer updateInspectSettingStatus(PropertyInspectSettingDTO dto);

    /**
     * <desc>
     *      处理路线信息所关联的巡检点，将些路线ID更新至巡检点表中
     * <desc/>
     *
     * @param pointArr 巡检点集合
     * @return sql执行行数
     * @author Juguang.S
     * @createDate 2019-12-24
     */
    Integer updateInspectPoint(@Param("pointArr") String[] pointArr,@Param("inspectLineId") String inspectLineId);

    /**
     * <desc>
     *      获取路线名称
     * <desc/>
     *
     * @param inspectLineId 巡检路线ID集合
     * @return 路线名称逗号相隔
     * @author Juguang.S
     * @createDate 2019-12-25
     */
    String getInspectLineName(@Param("inspectLineId") String[] inspectLineId);

    /**
     * <desc>
     *      校验巡检区域、巡检点、巡检路线、巡检计划的名称是否存在。
     * <desc/>
     *
     * @param  inspectName 所校验名称
     * @param  type 类型 1巡检区域 2巡检点 3巡检路线 4巡检计划
     * @return
     * @author Juguang.S
     * @createDate 2019-12-25
     */
    Integer isExistByInspectName(@Param("inspectName") String inspectName,@Param("type") String type,@Param("projectId") String projectId);

    /**
     * <desc>
     *      校验巡检区域是否与巡检点有所关联，有关联不允许删除
     * <desc/>
     *
     * @param  inspectId 巡检区域ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-26
     */
    Integer isRelationByInspectArea(@Param("inspectId") String inspectId);

    /**
     * <desc>
     *      校验巡检点是否与巡检路线有所关联，有关联不允许删除
     * <desc/>
     *
     * @param  inspectId 巡检点ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-26
     */
    Integer isRelationByInspectPoint(@Param("inspectId") String inspectId);

    /**
     * <desc>
     *      校验巡检路线是否与巡检计划有所关联，有关联不允许删除
     * <desc/>
     *
     * @param  inspectId 巡检路线ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-26
     */
    Integer isRelationByInspectLine(@Param("inspectId") String inspectId);

    /**
     * <desc>
     *      清除巡检点和路线的关联。
     * <desc/>
     *
     * @param  inspectId 巡检路线ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-26
     */
    Integer updateInspecPointAndLineRelation(@Param("inspectId") String inspectId);

    /**
     * <desc>
     *      根据巡检路线ID查询路线信息。
     * <desc/>
     *
     * @param  inspectLineId 巡检路线ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-26
     */
    PropertyInspectSettingVO getInspectLineInfo(@Param("inspectLineId") String inspectLineId);

    /**
     * <desc>
     *      根据巡检计划ID查询计划详情。
     * <desc/>
     *
     * @param  inspectPlanId 巡检计划ID
     * @return
     * @author Juguang.S
     * @createDate 2019-12-27
     */
    PropertyInspectSettingVO getInspectPlanInfo(@Param("inspectPlanId") String inspectPlanId);

    /**
     * <desc>
     *      获取巡检点列表。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @return 巡检点列表
     * @author Juguang.S
     * @createDate 2019-12-27
     */
    List<PropertyInspectSettingVO> getInspectPointList(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据巡检相应ID获取巡检信息。
     * <desc/>
     *
     * @param  inspectId 巡检相关Id
     * @param  type 类型 1巡检区域 2巡检点 3巡检路线 4巡检计划
     * @return
     * @author Juguang.S
     * @createDate 2020-01-08
     */
    PropertyInspectSettingVO getInspectNameById(@Param("inspectId") String inspectId,@Param("type") String type);

    /**
     * <desc>
     *      查询用户姓名
     * <desc/>
     *
     * @return 用户姓名列表
     * @author wangzhi
     * @createDate 2020/03/30
     */
    List<Map<String, Object>> getInspectUserRealName(@Param("inspectUserId") String inspectUserId);
}
